home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: vmsnet.sources.games
- Path: uunet!think.com!zaphod.mps.ohio-state.edu!sol.ctr.columbia.edu!mary.fordham.edu!areid
- From: areid@mary.fordham.edu (Darin Reid)
- Subject: Qix.01 -- arcade based game
- Organization: Fordham University
- Message-ID: <25FEB199218451852@mary.fordham.edu>
- News-Software: VAX/VMS VNEWS 1.41
- Sender: news@ctr.columbia.edu (The Daily Lose)
- Date: Tue, 25 Feb 1992 22:45:00 GMT
-
- Thanks to Ian!!!!!
-
- Neither I nor my Family accept responsibility for any problems with this
- program. Run it at your own discretion.
-
-
- - Darin
- $! ------------------ CUT HERE -----------------------
- $ v='f$verify(f$trnlnm("SHARE_VERIFY"))'
- $!
- $! This archive created by VMS_SHARE Version 7.2-007 22-FEB-1990
- $! On 24-FEB-1992 16:42:47.55 By user INA_IAN
- $!
- $! This VMS_SHARE Written by:
- $! Andy Harper, Kings College London UK
- $!
- $! Acknowledgements to:
- $! James Gray - Original VMS_SHARE
- $! Michael Bednarek - Original Concept and implementation
- $!
- $!+ THIS PACKAGE DISTRIBUTED IN 5 PARTS, TO KEEP EACH PART
- $! BELOW 30 BLOCKS
- $!
- $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER
- $! AND EXECUTE AS A COMMAND PROCEDURE ( @name )
- $!
- $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING:
- $! 1. QIX.COM;1
- $! 2. QIX.PAS;1
- $! 3. QIX.SCN;1
- $! 4. QIXF.FOR;1
- $! 5. QIXH.FOR;1
- $! 6. QIXTOPINI.FOR;1
- $!
- $set="set"
- $set symbol/scope=(nolocal,noglobal)
- $f=f$parse("SHARE_TEMP","SYS$SCRATCH:.TMP_"+f$getjpi("","PID"))
- $e="write sys$error ""%UNPACK"", "
- $w="write sys$output ""%UNPACK"", "
- $ if f$trnlnm("SHARE_LOG") then $ w = "!"
- $ ve=f$getsyi("version")
- $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto START
- $ e "-E-OLDVER, Must run at least VMS 4.4"
- $ v=f$verify(v)
- $ exit 44
- $UNPACK: SUBROUTINE ! P1=filename, P2=checksum
- $ if f$search(P1) .eqs. "" then $ goto file_absent
- $ e "-W-EXISTS, File ''P1' exists. Skipped."
- $ delete 'f'*
- $ exit
- $file_absent:
- $ if f$parse(P1) .nes. "" then $ goto dirok
- $ dn=f$parse(P1,,,"DIRECTORY")
- $ w "-I-CREDIR, Creating directory ''dn'."
- $ create/dir 'dn'
- $ if $status then $ goto dirok
- $ e "-E-CREDIRFAIL, Unable to create ''dn'. File skipped."
- $ delete 'f'*
- $ exit
- $dirok:
- $ w "-I-PROCESS, Processing file ''P1'."
- $ if .not. f$verify() then $ define/user sys$output nl:
- $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='P1'
- PROCEDURE Unpacker ON_ERROR ENDON_ERROR;SET(FACILITY_NAME,"UNPACK");SET(
- SUCCESS,OFF);SET(INFORMATIONAL,OFF);f:=GET_INFO(COMMAND_LINE,"file_name");b:=
- CREATE_BUFFER(f,f);p:=SPAN(" ")@r&LINE_END;POSITION(BEGINNING_OF(b));
- LOOP EXITIF SEARCH(p,FORWARD)=0;POSITION(r);ERASE(r);ENDLOOP;POSITION(
- BEGINNING_OF(b));g:=0;LOOP EXITIF MARK(NONE)=END_OF(b);x:=ERASE_CHARACTER(1);
- IF g=0 THEN IF x="X" THEN MOVE_VERTICAL(1);ENDIF;IF x="V" THEN APPEND_LINE;
- MOVE_HORIZONTAL(-CURRENT_OFFSET);MOVE_VERTICAL(1);ENDIF;IF x="+" THEN g:=1;
- ERASE_LINE;ENDIF;ELSE IF x="-" THEN IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+")=
- 1 THEN g:=0;ENDIF;ENDIF;ERASE_LINE;ENDIF;ENDLOOP;t:="0123456789ABCDEF";
- POSITION(BEGINNING_OF(b));LOOP r:=SEARCH("`",FORWARD);EXITIF r=0;POSITION(r);
- ERASE(r);x1:=INDEX(t,ERASE_CHARACTER(1))-1;x2:=INDEX(t,ERASE_CHARACTER(1))-1;
- COPY_TEXT(ASCII(16*x1+x2));ENDLOOP;WRITE_FILE(b,GET_INFO(COMMAND_LINE,
- "output_file"));ENDPROCEDURE;Unpacker;QUIT;
- $ delete/nolog 'f'*
- $ CHECKSUM 'P1'
- $ IF CHECKSUM$CHECKSUM .eqs. P2 THEN $ EXIT
- $ e "-E-CHKSMFAIL, Checksum of ''P1' failed."
- $ ENDSUBROUTINE
- $START:
- $ create 'f'
- X$ if "''f$mode()'" .eqs. "INTERACTIVE" then goto start$
- X$ assign _Nl: sys$print
- X$ ren sys$Login:qix.log `5B`5D*
- X$ start$:
- X$ pas/nodebug/nolist/nocheck qix
- X$ Link/Nodebug/nomap/notrace qix,qixf,qixh,util/lib
- X$ exit
- $ CALL UNPACK QIX.COM;1 2015366673
- $ create 'f'
- X`7B$C+`7D
- X`7B$S-`7D
- X`7B
- X
- X`09`09 XXXX XXXXX X X
- X`09`09X X X X X
- X`09`09X X X XX
- X`09`09X X X X XX
- X`09`09X X X X X
- X`09`09 XXX X XXXXX X X
- X`09`09
- X
- X
- X`09`09Program`09: Qix`20
- X
- X`09`09Author`09: Murray Speight`20
- X
- X`09`09Place`09: University Of Waikato`20
- X
- X`09`09Date `09: Mar 1982`20
- X
- X`09Software Is Subject To Change Without Notification
- X The Author And His Family assume No Rsponsability For
- X`09Its Reliabliity Or Use.`20
- X
- X `20
- X`09A Game Derived From a Video Game Of The Same Name `7D
- X
- X
- X
- X
- X
- XProgram Qix(Input,Output);
- X
- XLabel 9999;
- X
- XConst Max_Len_snake `09= 40;
- X`09Max_Buff_len `09= 200;
- X Blank `09= ' ';
- X You `09= 'O';
- X Qix_Head = '`60';
- X`09Esc`09`09= '`1B';
- X
- XType`09Buff_String `09= PAcked Array `5B1..Max_Buff_Len`5D Of Char;
- X`09
- X`09rng`09`09= 1..20;
- X
- X Wall_Types`09= (Inside,Outside,Created,Other,Snake,Tmp,TmpN,TmpN2,Tm
- VpCreat);
- X
- X`09Char_On_Screen`09= Record
- X`09 Sym`09 `09: Char;
- X`09 Wall`09`09: Wall_Types;
- X`09end;
- X
- X Direction = ( Clockwise , AntiClockwise );
- X
- X Screen_type = Array`5B0..24,0..81`5D Of Char_On_Screen;
- X
- X
- XVar`09Screen `09`09: Screen_Type;
- X`09Buff `09`09: Buff_String;
- X`09Buff_Len `09`09,
- X`09Marked_Clock_Greeb_X`09,
- X`09Marked_Clock_Greeb_Y`09,
- X`09Marked_Anti_Greeb_X`09,
- X`09Marked_Anti_Greeb_Y`09,
- X`09Num_Marked_Clock_Greeb `09,
- X`09Num_Marked_Anti_Greeb `09,
- X Last_Clock_Greeb_X`09,
- X Last_Clock_Greeb_y`09,
- X Last_Anti_Greeb_X`09,
- X Last_Anti_Greeb_y`09,
- X Clock_Greeb_X`09`09,
- X Clock_Greeb_y`09`09,
- X Anti_Greeb_X`09`09,
- X Anti_Greeb_y`09`09,
- X Extra_Greeb_X`09`09,
- X Extra_Greeb_Y`09`09,
- X Last_Extra_Greeb_X`09,
- X Last_Extra_Greeb_Y`09,
- X You_X`09`09`09,
- X`09You_Y`09`09`09,
- X Last_You_X `09`09,
- X Last_You_Y `09`09,
- X`09Move_X`09`09`09,
- X Level `09`09`09,
- X`09Move_y`09`09`09,
- X Start_Creat_X `09`09,
- X Start_Creat_Y `09`09,
- X Last_Start_Creat_X`09,
- X Last_Start_Creat_Y`09,
- X Snake_After_X `09`09,
- X Snake_After_Y `09`09,
- X Snake_Head_X `09`09,
- X`09Snake_Head_Y `09`09,
- X Snake_Move_X `09`09,
- X Snake_Move_Y `09`09,
- X`09Snake_Tail_X`09`09,
- X Lives`09`09`09,
- X Score`09`09`09,
- X Amt_Filled_In `09`09,
- X Len_Snake `09`09,
- X`09Len_Snake_When_Stuck`09,
- X`09Num_Snake_Searched`09,
- X`09Num_Moves_After_This_Pt ,
- X`09Moves_since_stuck`09,
- X`09Snake_Tail_Y`09`09: Integer;
- X Seed`09`09`09: REal;
- X Can_Create_wall `09,
- X Moving_Extra_Greebly `09,
- X`09Marked_Clock_Greeb`09,
- X`09Marked_Anti_Greeb`09,
- X Snake_got_stuck `09,
- X`09Died`09`09`09,
- X`09Creating_wall`09`09: Boolean;
- X Dir_You `09`09,`09`09`09`7B Direction You Are moving In `7D
- X Dir_When_Start_Creat `09: Direction;`09`09`7B Direction You Were In
- V Before Starting To Create `7D
- X
- XProcedure TopTen(Var Score : Integer);extern;
- X
- XProcedure Sleep(X_Sec,X_100_n_Sec : Integer);Extern;
- X
- XProcedure Help_Screen(%STDESCR file$ : Packed array `5Brng`5D of char );exte
- Vrn;
- X
- XProcedure TT_init( One : Integer);extern;
- X
- XFunction TT_1_Char_Now:Integer;extern;
- X
- XProcedure TT_Write( S : Buff_String; L : Integer );extern;
- X
- XProcedure TT_Cancel;extern;
- X
- XProcedure Sleep_Set( Seven : Integer ; Sec_100_th : Integer );extern;
- X
- XProcedure Sleep_Start;extern;
- X
- XProcedure Sleep_Wait;extern;
- X
- X
- X
- X
- XProcedure Break_Buff;
- X
- X
- XBegin
- X TT_Write(Buff,Buff_Len);
- X Buff_len := 0;
- Xend;
- X
- XProcedure Write_Buff( C : Char);
- X
- XBegin
- X Buff_Len := Buff_Len + 1;
- X Buff`5BBuff_Len`5D := C;
- X If Buff_Len > ( MAx_Buff_len - 10 ) Then`20
- X`09Break_Buff;
- Xend;
- X
- X
- X
- X
- XProcedure Pos(X,Y : Integer; Ch : Char);
- X
- XBegin
- X Buff`5Bbuff_Len+1`5D := Esc;
- X Buff`5BBuff_Len+2`5D := 'Y';
- X Buff`5BBuff_Len+3`5D := Chr(31+x);
- X Buff`5BBuff_Len+4`5D := Chr(31+y);
- X Buff`5BBuff_Len+5`5D := Ch;
- X Buff_Len := Buff_Len + 5;
- X If Buff_Len > ( MAx_Buff_len - 10 ) Then`20
- X`09Break_Buff;
- XEnd;
- X
- X
- XProcedure Draw_Screen;
- X
- XVar X,Y,Dummy : Integer;
- X
- XBegin
- X Break_Buff;
- X Write(Esc,'<',Esc,'`5B?2l');
- X Write(Esc,'H',esc,'J',Esc,'F');
- X For Y := 1 to 80 do`20
- X Write(Screen`5B1,Y`5D.Sym);
- X Writeln;
- X For X := 2 to 22 do begin
- X Write(Esc,'Y',chr(31+X),Chr(31+1),Screen`5BX,1`5D.Sym);
- X Writeln(Esc,'Y',CHr(31+X),Chr(31+80),Screen`5BX,80`5D.Sym);
- X end;
- X For Y := 1 to 80 do`20
- X Write(Screen`5B23,Y`5D.Sym);
- X Writeln(Esc,'G');
- X Write(Esc,'<',esc,'`5B1m',Esc,'#6Covered ');
- X Write(Esc,'`5B24;9H');
- X Write((Amt_Filled_In * 100 / 1638 ):5:2);
- X Write(esc,'`5B24;16HScore ');
- X write(esc,'`5B24;22H',Score:5);
- X Write(esc,'`5B24;29HLives');
- X For Dummy := 1 to Lives Do`20
- X Write(' O');
- X Writeln(esc,'`5B0m',esc,'`5B?2l',esc,'F',esc,'H');
- X Pos(Snake_Head_X,Snake_Head_Y,Qix_Head);
- X Pos(You_X,You_Y,You);
- X Break_Buff;
- Xend;
- X
- XFunction Rand( X : Integer):Integer;
- X
- X Function mth$Random(Var Seed : Real):Real;Extern;
- X
- X
- XBegin
- X Rand := Trunc(Mth$Random(Seed)*X+1);
- Xend;
- X
- XFunction Correct_Sym(X,Y,Compare_X,Compare_Y:Integer):Char;
- X
- XVar Count : Integer;
- X
- XBegin
- X Count := 0; `20
- X If Screen`5BX-1,y`5D.Sym In `5B'l','w','k','t','n','u','x'`5D Then`20
- X Count := Count + 1
- X Else
- X If ( X - 1 = Compare_X ) And ( Y = Compare_Y ) Then`20
- X Count := Count + 1;
- X If Screen`5Bx,Y-1`5D.Sym In `5B'l','w','t','n','m','v','q'`5D Then
- X Count := Count + 2
- X Else
- X If ( X = Compare_X ) And ( Y - 1 = Compare_Y ) Then`20
- X Count := Count + 2;
- X If Screen`5BX,Y+1`5D.Sym In `5B'w','n','v','k','u','j','q'`5D Then`20
- X Count := Count + 4
- X Else
- X If ( X = Compare_X ) And ( Y + 1 = Compare_Y ) Then`20
- X Count := Count + 4;
- X If Screen`5BX+1,Y`5D.Sym In `5B't','n','u','m','v','j','x'`5D Then`20
- X Count := Count + 8
- X Else
- X If ( X + 1 = Compare_X ) And ( Y = Compare_Y ) Then`20
- X Count := Count + 8;
- X Case Count Of`20
- X 0`09: `7B NOthing `7D;
- X 1,8,9 `09: Correct_Sym := 'x';
- X 2,4,6`09: Correct_Sym := 'q';
- X 3`09: Correct_Sym := 'j';
- X 5`09: Correct_Sym := 'm';
- X 7`09: Correct_Sym := 'v';
- X 10`09: Correct_Sym := 'k';
- X 11`09: Correct_Sym := 'u';
- X 12`09: Correct_Sym := 'l';
- X 13`09: Correct_Sym := 't';
- X 14`09: Correct_Sym := 'w';
- X 15`09: Correct_Sym := 'n'
- X end `7B case `7D;
- Xend;
- X
- XProcedure IniTalise_screen;
- X
- XVar X,Y,Dummy,Snake_Move_x,Snake_Move_Y,Cnt : Integer;
- X Save_ch : Char;
- X
- Xbegin
- X Died := False;
- X Level := Level + 1;
- X Sleep_set(7,17-Level);
- X For X := 0 To 24 Do`20
- X For Y := 0 To 81 Do Begin
- X Screen`5BX,Y`5D.Sym := Blank;
- X Screen`5BX,Y`5D.Wall := Other;
- X End;
- X For Y := 0 To 81 Do Begin
- X Screen`5B0,Y`5D.Sym := '.';
- X Screen`5B0,Y`5D.Wall := Outside;
- X Screen`5B24,Y`5D.Sym := '.';
- X Screen`5B24,Y`5D.Wall := Outside;
- X End `7B For `7D;
- X For X := 0 To 24 Do Begin
- X Screen`5BX,0`5D.Sym := '.';
- X Screen`5BX,0`5D.Wall:= Outside;
- X Screen`5BX,81`5D.Sym := '.';
- X Screen`5BX,81`5D.Wall := Outside;
- X end;
- X For Y := 1 To 80 Do Begin
- X Screen`5B1,Y`5D.Sym := 'q';
- X Screen`5B1,Y`5D.Wall := Inside;
- X Screen`5B23,Y`5D.Sym := 'q';
- X Screen`5B23,Y`5D.Wall := Inside;
- X end;
- X For X := 1 to 23 Do Begin
- X Screen`5BX,1`5D.Sym := 'x';
- X Screen`5BX,1`5D.Wall := Inside;
- X Screen`5BX,80`5D.Sym := 'x';
- X Screen`5BX,80`5D.Wall := Inside;
- X end;
- X Screen`5B1,1`5D.Sym := 'l';
- X Screen`5B1,1`5D.wall := Inside;
- X Screen`5B1,80`5D.Sym := 'k';
- X Screen`5B1,80`5D.wall := Inside;
- X Screen`5B23,1`5D.Sym := 'm';
- X Screen`5B23,1`5D.wall := Inside;
- X Screen`5B23,80`5D.Sym := 'j';
- X Screen`5B23,80`5D.wall := Inside;
- X You_X := 1;
- X You_Y := 1;
- X Move_X := 0;
- X Move_Y := 1;
- X Last_You_X := 2;
- X Last_You_Y := 1;
- X Dir_You := Clockwise;
- X Snake_Head_X := 11;
- X Snake_Head_Y := 40;
- X Snake_Tail_X := Snake_Head_X;
- X Snake_Tail_Y := Snake_Head_Y;
- X Moves_since_stuck := 0;
- X Screen`5BSnake_Head_X,Snake_Head_Y`5D.Sym := Qix_Head;
- X Screen`5BSnake_Head_X,Snake_Head_Y`5D.Wall := Snake;
- X Len_Snake := 0;
- X Amt_Filled_In := 0;
- X Moving_extra_Greebly := False;
- X Snake_got_stuck := False;
- X Snake_Move_X := 0;
- X Snake_Move_Y := -1;
- X Can_Create_wall := False;
- X Clock_Greeb_X := 23;`20
- X Clock_Greeb_Y := 40;
- X Last_Clock_Greeb_X := Clock_Greeb_X;
- X Last_Clock_Greeb_Y := Clock_Greeb_Y + 1;
- X Anti_Greeb_X := 12;`20
- X Anti_Greeb_Y := 80;
- X Last_Anti_Greeb_X := Anti_Greeb_X + 1;
- X Last_Anti_Greeb_Y := Anti_Greeb_Y;
- X Marked_Anti_Greeb := False;
- X Marked_Clock_Greeb := False;
- X Marked_Anti_Greeb_X := 0;
- X Marked_Anti_Greeb_Y := 0;
- X Marked_Clock_Greeb_X := 0;
- X Marked_Clock_Greeb_Y := 0;
- X Num_Moves_After_This_pt := 9999;
- X Draw_Screen;
- Xend;
- X
- X
- XProcedure Initalise;
- X
- XVar Rep : Char;
- X
- X
- XBegin
- X LineLimit(Output,Maxint);
- X TT_Init(1);
- X Seed := Clock;
- X Write(Esc,'<',Esc,'`5B2J',esc,'`5B1;1H');
- X Help_Screen('Games:qix.Scn');
- X Level := 0;
- X Lives := 3;
- X Score := 0;
- X Buff_Len := 0;
- X Initalise_Screen;
- Xend `7B Initalise `7D;
- X `20
- X
- XFunction Valid_Move(X,Y:INteger):Boolean;
- X
- Xbegin
- X If Screen`5BX,Y`5D.Sym = '.' Then`20
- X Valid_Move := False
- X Else`20
- X If Screen`5BX,Y`5D.Wall = Created Then`20
- X Valid_Move := False
- X Else
- X Valid_Move := True;
- Xend;
- X
- XProcedure Move_Anti_Clockwise(Var X,Y,Last_X,Last_Y:INteger);
- X
- XVar Tmp_X,Tmp_Y : Integer;
- X
- XBegin
- XTmp_X := X;
- XTmp_Y := Y;
- XCase ( Last_Y-Y) Of`20
- X 1 : Case Screen`5BX,Y`5D.Sym Of`20
- X 'l' : X := X + 1;
- X 'w' : X := X + 1;
- X 't' : X := X + 1;
- X 'n' : X := X + 1;
- X 'm' : X := X - 1;
- X 'v' : Y := Y - 1;
- X 'q' : Y := Y - 1;
- X end;
- X 0 : Case (Last_X-X) Of`20
- X 1 : Case Screen`5BX,y`5D.Sym Of`20
- X 'l' : Y := Y + 1;
- X 'w' : Y := Y - 1;
- X 'k' : Y := Y - 1;
- X 't' : X := X - 1;
- X 'n' : Y := Y - 1;
- X 'u' : Y := Y - 1;
- X 'x' : X := X - 1;
- X end;
- X 0 : ;
- X -1 : Case Screen`5BX,y`5D.Sym Of`20
- X 't' : Y := Y + 1;
- X 'n' : Y := Y + 1;
- X 'u' : X := X + 1;
- X 'm' : Y := Y + 1;
- X 'v' : Y := Y + 1;
- X 'j' : Y := Y - 1;
- X 'x' : X := X + 1;
- X end;
- X end;
- X -1 : Case Screen`5BX,Y`5D.Sym Of`20
- X 'w' : Y := Y + 1;
- X 'k' : X := X + 1;
- X 'n' : X := X - 1;
- X 'u' : X := X - 1;
- X 'v' : X := X - 1;
- X 'j' : X := X - 1;
- +-+-+-+-+-+-+-+- END OF PART 1 +-+-+-+-+-+-+-+-
-
- __________
- Darin Reid
- Internet: Areid@Mary.Fordham.Edu
- Bitnet: Areid@Fordmulc
- Phone: (212) 749-8187
-